<?php

Class ProdutorDAO {
    
    public function pegarIdProdutor($nomeProdutor) {
        
        try {
            
            //Banco de dados
            $conexao = new Conexao();
            $conn = $conexao->abrirConexao();
            
            //Codigo SQL
            $result = $conn->query("
                SELECT produtor.id as id, produtor.cpf as cpf, produtor.contato_pessoal as contato_pessoal, 
                produtor.contato_profissional as contato_profissional, usuario.nome as nome, produtor.status as status 
                FROM produtor,usuario 
                WHERE produtor.id_usuario = usuario.id AND produtor.shadow = 0
                AND usuario.nome LIKE '%" . $nomeProdutor . "%'
                AND tipo = 'PRODUTOR'
            ");

            foreach ($result as $value) {
                //Recupera valores dos seguros
                $produtor = new Produtor();
                $produtor->setIdProdutor($value['id']);
                $produtor->setCpf($value['cpf']);
                $produtor->setNome(utf8_encode($value['nome']));
                $produtor->setContatoPessoal($value['contato_pessoal']);
                $produtor->setContatoProfissional($value['contato_profissional']);
                $produtor->setStatus($value['status']);
            }
            
            //fechar conexao
            $conn = $conexao->fecharConexao();
            return $produtor;
        } catch (Exception $exc) {
            echo $exc->getTraceAsString();
        }
            
    }

    public function selecionarProdutor($idProdutor) {

        try {
            //Banco de dados
            $conexao = new Conexao();
            $conn = $conexao->abrirConexao();

            //Codigo SQL
            $result = $conn->query("
                SELECT usuario.email as email, usuario.nome as nome, produtor.cpf as cpf, 
                produtor.banco as banco, produtor.agencia as agencia, produtor.conta as conta, 
                produtor.contato_pessoal as contato_pessoal, produtor.contato_profissional as contato_profissional, 
                usuario.login as login, usuario.senha as senha, usuario.tipo as tipo, produtor.status as status 
                FROM produtor,usuario 
                WHERE produtor.id_usuario = usuario.id AND produtor.shadow = 0 AND produtor.id = " . $idProdutor . "
            ");

            $num = count($result);
            if ($num == 0) {
                $produtor = false;
            } else {
                $produtor = new Produtor();
                foreach ($result as $value) {
                    $produtor->setEmail(utf8_encode($value['email']));
                    $produtor->setNome(utf8_encode($value['nome']));
                    $produtor->setCpf($value['cpf']);
                    $produtor->setBanco(utf8_encode($value['banco']));
                    $produtor->setAgencia($value['agencia']);
                    $produtor->setConta($value['conta']);
                    $produtor->setContatoPessoal($value['contato_pessoal']);
                    $produtor->setContatoProfissional($value['contato_profissional']);
                    $produtor->setLogin(utf8_encode($value['login']));
                    $produtor->setSenha($value['senha']);
                    $produtor->setTipo($value['tipo']);
                    $produtor->setStatus(utf8_encode($value['status']));
                }
            }

            $conn = $conexao->fecharConexao();
            return $produtor;
        } catch (Exception $exc) {
            echo $exc->getTraceAsString();
        }
    }
    
    public function pesquisarProdutor($tipo_pesquisa, $pesquisa_produtor) {
        try {

            //Banco de dados
            $conexao = new Conexao();
            $conn = $conexao->abrirConexao();

            //Codigo SQL
            $result = $conn->query("
                SELECT produtor.id as id, produtor.cpf as cpf, produtor.contato_pessoal as contato_pessoal, 
                produtor.contato_profissional as contato_profissional, usuario.nome as nome, produtor.status as status 
                FROM produtor,usuario 
                WHERE produtor.id_usuario = usuario.id AND produtor.shadow = 0
                AND ". $tipo_pesquisa ." LIKE '%" . $pesquisa_produtor . "%'
                AND tipo = 'PRODUTOR'
            ");

            $produtor = array();
            $count = 0;

            foreach ($result as $value) {
                //Recupera valores dos seguros
                $produtor[$count] = new Produtor();
                $produtor[$count]->setIdProdutor($value['id']);
                $produtor[$count]->setCpf($value['cpf']);
                $produtor[$count]->setNome(utf8_encode($value['nome']));
                $produtor[$count]->setContatoPessoal($value['contato_pessoal']);
                $produtor[$count]->setContatoProfissional($value['contato_profissional']);
                $produtor[$count]->setStatus($value['status']);
                $count++;
            }

            $conn = $conexao->fecharConexao();
            return $produtor;
        } catch (Exception $exc) {
            echo $exc->getTraceAsString();
        }
    }

    public function listarProdutores() {

        try {

            //Banco de dados
            $conexao = new Conexao();
            $conn = $conexao->abrirConexao();

            //Codigo SQL
            $result = $conn->query("
                SELECT produtor.id as id, produtor.cpf as cpf, produtor.contato_pessoal as contato_pessoal, 
                produtor.contato_profissional as contato_profissional, usuario.nome as nome, produtor.status as status 
                FROM produtor,usuario 
                WHERE produtor.id_usuario = usuario.id AND produtor.shadow = 0
            ");

            $produtor = array();
            $count = 0;

            foreach ($result as $value) {
                //Recupera valores dos seguros
                $produtor[$count] = new Produtor();
                $produtor[$count]->setIdProdutor($value['id']);
                $produtor[$count]->setCpf($value['cpf']);
                $produtor[$count]->setNome(utf8_encode($value['nome']));
                $produtor[$count]->setContatoPessoal($value['contato_pessoal']);
                $produtor[$count]->setContatoProfissional($value['contato_profissional']);
                $produtor[$count]->setStatus($value['status']);
                $count++;
            }

            $conn = $conexao->fecharConexao();
            return $produtor;
        } catch (Exception $exc) {
            echo $exc->getTraceAsString();
        }
    }

    public function cadastrarProdutor(Produtor $produtor) {

        try {

            //Banco de dados
            $conexao = new Conexao();
            $conn = $conexao->abrirConexao();

            //Codigo SQL
            $query = "
                INSERT INTO usuario (id, email, nome, login, 
                senha, tipo, status, shadow) 
                VALUES (NULL, ?, ?, ?, ?, ?, 'ATIVADO', '0');
            ";

            //Cadastro Usuario
            $stmt = $conn->prepare($query);
            $stmt->bindValue(1, utf8_decode($produtor->getEmail()));
            $stmt->bindValue(2, utf8_decode($produtor->getNome()));
            $stmt->bindValue(3, utf8_decode($produtor->getLogin()));
            $stmt->bindValue(4, utf8_decode($produtor->getSenha()));
            $stmt->bindValue(5, utf8_decode($produtor->getTipo()));
            $stmt->execute();

            $idUsuario = $conn->lastInsertId();

            $query2 = "
                INSERT INTO produtor (id, cpf, contato_pessoal, 
                contato_profissional, banco, agencia, conta, id_usuario, 
                status, shadow) 
                VALUES (NULL, ?, ?, ?, ?, ?, ?, ?, 'ATIVADO', '0');
            ";

            //Cadastro Produtor
            $stmt2 = $conn->prepare($query2);
            $stmt2->bindValue(1, utf8_decode($produtor->getCpf()));
            $stmt2->bindValue(2, utf8_decode($produtor->getContatoPessoal()));
            $stmt2->bindValue(3, utf8_decode($produtor->getContatoProfissional()));
            $stmt2->bindValue(4, utf8_decode($produtor->getBanco()));
            $stmt2->bindValue(5, $produtor->getAgencia());
            $stmt2->bindValue(6, $produtor->getConta());
            $stmt2->bindValue(7, $idUsuario);
            $stmt2->execute();

            $conn = $conexao->fecharConexao();
            return true;
        } catch (Exception $exc) {
            echo $exc->getTraceAsString();
            return false;
        }
    }

    public function editarProdutor($idProdutor, Produtor $produtor) {

        try {
            //Banco de dados
            $conexao = new Conexao();
            $conn = $conexao->abrirConexao();

            //Codigo SQL
            $pesquisarIdUsuario = "
                SELECT id_usuario 
                FROM `produtor` 
                WHERE id = ?
            ";
            
            $idUsuario = $conn->prepare($pesquisarIdUsuario);
            $idUsuario->bindValue(1, $idProdutor);
            $idUsuario->execute();
            
            foreach ($idUsuario as $value) {
                $id = $value['id_usuario'];
            }

            //Codigo SQL
            $query = "
                UPDATE usuario 
                SET email = ?, nome = ?, senha = ?, 
                status = ? 
                WHERE usuario.id = ?;
            ";
            
            //Atualizar Usuario
            $stmt = $conn->prepare($query);
            $stmt->bindValue(1, utf8_decode($produtor->getEmail()));
            $stmt->bindValue(2, utf8_decode($produtor->getNome()));
            $stmt->bindValue(3, utf8_decode($produtor->getSenha()));
            $stmt->bindValue(4, utf8_decode($produtor->getStatus()));
            $stmt->bindValue(5, $id);
            $stmt->execute();

            $query2 = "
                UPDATE produtor SET cpf = ?, contato_pessoal = ?, 
                contato_profissional = ?, banco = ?, agencia = ?, 
                conta = ?, status = ?
                WHERE produtor.id = ?;";

            //Atualizar Produtor
            $stmt2 = $conn->prepare($query2);
            $stmt2->bindValue(1, utf8_decode($produtor->getCpf()));
            $stmt2->bindValue(2, utf8_decode($produtor->getContatoPessoal()));
            $stmt2->bindValue(3, utf8_decode($produtor->getContatoProfissional()));
            $stmt2->bindValue(4, utf8_decode($produtor->getBanco()));
            $stmt2->bindValue(5, $produtor->getAgencia());
            $stmt2->bindValue(6, $produtor->getConta());
            $stmt2->bindValue(7, $produtor->getStatus());
            $stmt2->bindValue(8, $idProdutor);
            $stmt2->execute();

            $conn = $conexao->fecharConexao();
            return true;
        } catch (Exception $exc) {
            echo $exc->getTraceAsString();
            return false;
        }
    }

    public function excluirProdutor($idProdutor) {

        try {

            //Banco de dados
            $conexao = new Conexao();
            $conn = $conexao->abrirConexao();

            //Codigo SQL
            $pesquisarIdUsuario = "
                SELECT id_usuario 
                FROM `produtor` 
                WHERE id = " . $idProdutor . "
            ";

            $idUsuario = $conn->query($pesquisarIdUsuario);
            foreach ($idUsuario as $value) {
                $id = $value['id_usuario'];
            }

            $excluirProdutorQuery = "
                UPDATE produtor 
                SET status = 'DESATIVADO', shadow = 1
                WHERE produtor.id = ?;
            ";

            $excluirUsuarioQuery = "
                UPDATE usuario 
                SET status = 'DESATIVADO', shadow = 1
                WHERE usuario.id = ?;
            ";
            
            $stmtProdutor = $conn->prepare($excluirProdutorQuery);
            $stmtProdutor->bindValue(1, $idProdutor);
            $stmtProdutor->execute();
            
            $stmtUsuario = $conn->prepare($excluirUsuarioQuery);
            $stmtUsuario->bindValue(1, $id);
            $stmtUsuario->execute();
            
            return true;
            
        } catch (Exception $exc) {
            echo $exc->getTraceAsString();
        }
    }

}

?>
